# == Schema Information
# Schema version: 33
#
# Table name: baneos
#
#  id             :integer(11)   not null, primary key
#  baneador_id    :integer(11)   
#  email_baneador :string(255)   
#  baneado_id     :integer(11)   
#  email_baneado  :string(255)   
#  created_at     :datetime      
#  updated_at     :datetime      
#  motivo         :string(255)   
#

class Baneo < ActiveRecord::Base
  belongs_to :usuario
  belongs_to :baneado, :class_name => "Usuario", :foreign_key => "baneado_id"
  
  error = '^Ya existe la relacion de baneo entre ambos usuarios'  
  
  validates_uniqueness_of :baneador_id, :scope => [:baneado_id, :email_baneado], :message => error
  validates_uniqueness_of :email_baneador, :scope => [:baneado_id, :email_baneado], :message => error
 
  before_create :si_baneo_total_borrar_baneos_individuales, :si_baneo_usuario_rechazar_regalos

  def validate
    if (baneador_id == nil and email_baneador == nil)
      errors.add_to_base("Debes indicar el usuario o el email del que banea") 
    elsif (baneador_id != nil and email_baneador != nil)
      errors.add_to_base("Indica el usuario o el mail del que banea, no ambos")
    end
    
    if (baneado_id == nil and email_baneado == nil)
      errors.add_to_base("Debes indicar el usuario o el email del baneado") 
    elsif (baneado_id != nil and email_baneado != nil)  
      errors.add_to_base("Indica el usuario o el mail del baneado, no ambos")
    end
  end

  # Si creamos un baneo total de la aplicación, eliminamos los registros de baneos individuales a otra aplicación
  def si_baneo_total_borrar_baneos_individuales
    Baneo.delete_all(["email_baneador = ?  or baneador_id = ?", email_baneador, baneador_id]) if baneado_id == -1
  end
  
  # Si baneamos a un usuario, eliminaremos todos sus regalos
  def si_baneo_usuario_rechazar_regalos
    Regalo.update_all("state = 'rechazado'",
      ["remitente_id = ? and invitado_id = ?", baneador_id, baneado_id]) if (baneador_id and baneado_id)
  end
end
